// HSS.Forms.Docking.Interfaces.cs
// ----------------------------------------------------------------------------
// Licensed under the MIT license
// http://www.opensource.org/licenses/mit-license.html
// ----------------------------------------------------------------------------
// HighSpeed-Solutions, LLC
// Copyright (c) 2001-2010
// ----------------------------------------------------------------------------
// File:       Interfaces.cs
// Author:     HSS\gbanta
// Created:    08/12/2010
// Modified:   12/04/2010
// ----------------------------------------------------------------------------
using System.Drawing;
using System.Windows.Forms;

namespace HSS.Forms.Docking
{
	/// <summary>
	/// IDockContent
	/// </summary>
	public interface IDockContent
	{
		/// <summary>
		/// DockContentHandler
		/// </summary>
		DockContentHandler DockHandler { get;	}
	}

	/// <summary>
	/// INestedPanesContainer
	/// </summary>
	public interface INestedPanesContainer
	{
		/// <summary>
		/// DockState
		/// </summary>
		DockState DockState { get;	}
		/// <summary>
		/// DisplayingRectangle
		/// </summary>
		Rectangle DisplayingRectangle { get;	}
		/// <summary>
		/// NestedPanes
		/// </summary>
		NestedPaneCollection NestedPanes { get;	}
		/// <summary>
		/// VisibleNestedPanes
		/// </summary>
		VisibleNestedPaneCollection VisibleNestedPanes { get;	}
		/// <summary>
		/// IsFloat
		/// </summary>
		bool IsFloat { get;	}
	}

	internal interface IDragSource
	{
		Control DragControl { get; }
	}

	internal interface IDockDragSource : IDragSource
	{
		Rectangle BeginDrag(Point ptMouse);
		bool IsDockStateValid(DockState dockState);
		bool CanDockTo(DockPane pane);
		void FloatAt(Rectangle floatWindowBounds);
		void DockTo(DockPane pane, DockStyle dockStyle, int contentIndex);
		void DockTo(DockPanel panel, DockStyle dockStyle);
	}

	internal interface ISplitterDragSource : IDragSource
	{
		void BeginDrag(Rectangle rectSplitter);
		void EndDrag();
		bool IsVertical { get; }
		Rectangle DragLimitBounds { get; }
		void MoveSplitter(int offset);
	}
}